Amazon CloudWatch SyntheticsによるURL監視のアラームをメール通知してみた(AWS CDK)
こんにちは、CX事業本部 IoT事業部の若槻です。
Amazon CloudWatch Syntheticsを使用すると、WebサイトやAPIのURLの監視(外形監視)を行うことができます。
今回は、Amazon CloudWatch SyntheticsによるURL監視のアラームをメール通知する構成をAWS CDKで実装してみました。
構成
10分に1回のCanary実行が一度でも失敗したらアラーム状態となりメール通知が行われます。
構築
CDKコード
import * as path from 'path'; import * as cdk from '@aws-cdk/core'; import * as cloudwatch from '@aws-cdk/aws-cloudwatch'; import * as cloudwatchActions from '@aws-cdk/aws-cloudwatch-actions'; import * as sns from '@aws-cdk/aws-sns'; import * as synthetics from '@aws-cdk/aws-synthetics'; export class AwsCdkAppStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) { super(scope, id, props); //CloudWatch Synthetics Canary const canary = new synthetics.Canary(this, 'WebsiteCanary', { canaryName: `website-canary`, schedule: synthetics.Schedule.rate(cdk.Duration.minutes(10)), runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_2, test: synthetics.Test.custom({ code: synthetics.Code.fromAsset( path.join(__dirname, `../src/lambda/website-canary-handler`) ), handler: 'index.handler', }), environmentVariables: { URL: 'https://dev.classmethod.jp/', }, }); //SNSトピック const canaryFailNotificationTopic = new sns.Topic( this, `canary-fail-notification-topic` ); //CloudWatch Alarm const canaryAlarm = new cloudwatch.Alarm(this, 'canary-alarm', { alarmName: 'canary-alarm', metric: canary.metricFailed(), evaluationPeriods: 1, threshold: 1, statistic: cloudwatch.Statistic.SUM, comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, period: cdk.Duration.minutes(10), }); //AlarmにSNSトピックに通知するアクションを追加 canaryAlarm.addAlarmAction( new cloudwatchActions.SnsAction(canaryFailNotificationTopic) ); } }
- Canary、SNSトピック、CloudWatch Alarmのリソースを作成しています。
- Canaryの監視対象とするサイトのURLは環境変数
URL
でスクリプトに渡しています。 - CloudWatch Alarmの評価期間はCanaryの実行間隔と同じ10分間とし、評価期間中のCanary実行のFail回数が1回以上であればアラーム状態となるようにすることにより、Canary実行が一回でも失敗すれば通知がされるようにしています。
CDKデプロイしてリソースを作成します。
サブスクリプションの登録
作成されたSNSトピックのサブスクリプションとしてメールアドレスを登録します。
アラームを発生させてみる
Canaryの監視対象URLを404となるものに変更し、CDKデプロイして変更を反映させます。
const canary = new synthetics.Canary(this, 'WebsiteCanary', { canaryName: `website-canary`, schedule: synthetics.Schedule.rate(cdk.Duration.minutes(10)), runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_2, test: synthetics.Test.custom({ code: synthetics.Code.fromAsset( path.join(__dirname, `../src/lambda/website-canary-handler`) ), handler: 'index.handler', }), environmentVariables: { URL: 'https://dev.classmethod.jp/hoge', }, });
最新のCanary実行が失敗してアラームが発生しています。
サブスクリプションに登録したアドレスにアラーム通知がメールで届きました。
アラームのタイムラインでも現在の状態がアラーム状態となっています。
アラームの履歴を見ると詳細な時系列を確認できます。
参考
以上